【VBA研究】打印表单时指定打印机

您所在的位置:网站首页 excel vba打印设置 【VBA研究】打印表单时指定打印机

【VBA研究】打印表单时指定打印机

2023-09-23 14:40| 来源: 网络整理| 查看: 265

作者:iamlaosong

我用Excel做做了一个打印拣货单标签的工具,实际上是打印邮件标签兼做拣货单,由于仓库电脑需要连接多台打印机(不同标签用纸不同,换纸还不如换打印机),所以打印标签时,经常要改变默认打印机,一旦忘了修改,就会打印出一堆废纸来。那么,不改变默认打印机,能不能将标签打印到指定的打印机上面呢?

答案是肯定的。

打印时指定打印机只需要提供ActivePrinter参数内容就可以了,下面是打印一张单据的代码,其中变量ptName内容就是打印机名称,从单元格中读取:

    ptName = Cells(4, "M")  

打印代码如下:

'单行打印 Sub SinglePrint() Dim rr As Long, ptName As String stName = "规格" SizeNo = Sheets(stName).[A1].End(xlDown).Row arrSize = Sheets(stName).Range("A2:D" & SizeNo).Value SizeNo = SizeNo - 1 rr = Cells(4, "K") ptName = Cells(4, "M") rr = GetRowData(rr) ActiveSheet.PrintOut ActivePrinter:=ptName End Sub

下面是打印筛选内容的代码:

'选择打印 Sub SelectPrint() Dim md As Integer, pm As Integer, rr1, rr2, rr As Long, pn As Long, pdf As String, msg As String Dim ptName As String stName = "规格" SizeNo = Sheets(stName).[A1].End(xlDown).Row arrSize = Sheets(stName).Range("A2:D" & SizeNo).Value SizeNo = SizeNo - 1 ptName = Cells(4, "M") stName = "清单" pm = Cells(7, "M") '输出模式:0=到打印机;其它(n)=按n*100分组到文件 rr1 = 3 rr2 = Sheets(stName).[A1].End(xlDown).Row For rr = rr1 To rr2 If Not Sheets(stName).Rows(rr).Hidden Then rr = GetRowData(rr) Application.StatusBar = "已完成:" & CStr(Round((rr - rr1) * 100 / (rr2 - rr1 + 1), 2)) & "%" DoEvents 'Worksheets.("sheet1").PrintOut From:=2, To:=3, Copies:=3 'ActiveSheet.PrintPreview If pm = 0 Then ActiveSheet.PrintOut ActivePrinter:=ptName 'MsgBox "print line: " & rr Else pn = Int((rr - rr1) / (pm * 100)) pdf = ThisWorkbook.Path & "\pdf" & pn If pm 0 And Dir(pdf, vbDirectory) = vbNullString Then MkDir pdf End If ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdf & "\装箱单" & Format(rr, "000000") & ".pdf" End If End If Next rr Application.StatusBar = "就绪" End Sub

这儿用到的参数打印机名称,可以用下面的代码获取并保存到工作表中。也可以用这个方法改变默认打印机(语句是ws.SetDefaultPrinter ptName),然后打印中就不需要指定打印机了,打印结束时再恢复原来默认的打印机。不过,我觉得直接指定更好。

'得到所有打印机名称 Sub AllPrinter() Dim i&, ws As Object, st$, ptn$, n& Set ws = CreateObject("wscript.network") 'st = Application.ActivePrinter '保存系统默认打印机 n = ws.EnumPrinterConnections.Count For i = 1 To n - 1 Step 2 ptn = ws.EnumPrinterConnections.Item(i) '打印机名称 Cells((i + 5) / 2, "O") = (i + 1) / 2 Cells((i + 5) / 2, "P") = ptn Next End Sub

得到的名称和参数填写界面如下:

在VBA中,使用PrintOut方法来打印工作表。例如,语句:

ActiveSheet.PrintOut

将打印当前工作表。

PrintOut方法的语法如下:

SheetObj.PrintOut(From,To,Copies,Preview,ActivePrinter,PrintToFile,Collate,PrToFileName,IgnorePrintAreas)

说明:

所有参数均可选。使用适当的参数指定打印机、份数、逐份打印以及是否需要打印预览。使用参数PrintToFile和参数PrToFileName将工作表打印到文件。参数From和参数To用于指定打印的页码范围。

参数From指定开始打印的页码。如果忽略,则从头开始打印。

参数To指定最后打印的页码。如果忽略,则打印到最后一页。

参数Copies指定要打印的份数。如果忽略,则只打印1份。

参数Preview指定打印前是否要预览打印效果。设置为True则打印预览;设置为False(默认值)则直接打印。

参数ActivePrinter设置当前打印机的名称。

参数PrintToFile设置为True,将打印到文件。如果没有指定参数PrToFileName,将提示用户输入要输出的文件名。

参数Collate设置为True将逐份打印。

参数PrToFileName在参数PrintToFile设置为True时指定想要打印到文件的名称。

参数IgnorePrintAreas设置为True将忽略打印区域,打印整份文档。

例如:

ActiveSheet.PrintOut From:=1, to:=3

Worksheets. ("sheet1").PrintOut From:=2, To:=3, Copies:=3



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3